package m2;

import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.exception.RemotingException;

import java.util.List;

public class Producer {
    static String[] msgs = {
            "15103111039,创建",
            "15103111065,创建",
            "15103111039,付款",
            "15103117235,创建",
            "15103111065,付款",
            "15103117235,付款",
            "15103111065,完成",
            "15103111039,推送",
            "15103117235,完成",
            "15103111039,完成"
    };


    public static void main(String[] args) throws MQBrokerException, RemotingException, InterruptedException, MQClientException {
        // 创建生产者
        DefaultMQProducer p = new DefaultMQProducer("p2");
        // 设置 name server
        p.setNamesrvAddr("192.168.64.141:9876");
        // 启动
        p.start();
        // 遍历 msgs 数组发送消息，使用队列选择器选择队列
        for (String s : msgs) {
            // s = "15103111039,完成"
            // 提取订单id：15103111039，使用订单id来选择队列
            Long orderId = Long.valueOf(s.split(",")[0]);
            Message msg = new Message("Topic2", s.getBytes());
            // p.send(msg, 队列选择器, 选择的依据);
            SendResult r =
                    p.send(msg, new MessageQueueSelector() {
                        @Override
                        public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                            Long orderId = (Long) arg;
                            int index = (int) (orderId % mqs.size());
                            return mqs.get(index);
                        }
                    }, orderId);

            System.out.println(r);
        }
    }
}